﻿using System;
using System.Collections.Generic;

using Moe.ECamel.Common.Entities;

namespace Moe.ECamel.Common.Contracts
{
	/// <summary>
	/// Contract for employees services.
	/// </summary>
	public interface IEmployeeService : IECamelService
	{
		/// <summary>
		/// Gets a list of all the employees in the specified library.
		/// </summary>
		/// <param name="libraryId">Library Id to look for.</param>
		/// <returns>List of employees in specified library.</returns>
		List<Employee> GetEmployeesByLibrary(int libraryId);
		/// <summary>
		/// Creates a new emplyee.
		/// </summary>
		/// <param name="employee">Employee details.</param>
		/// <returns>If successful - null, otherwise validation error.</returns>
		ECamelError CreateEmployee(Employee employee);
		/// <summary>
		/// Updates an emplyee.
		/// </summary>
		/// <param name="employee">Employee details.</param>
		/// <returns>If successful - null, otherwise validation error.</returns>
		ECamelError UpdateEmployee(Employee employee);
		/// <summary>
		/// Updates an employee status.
		/// </summary>
		/// <param name="employeeId">Employee Id.</param>
		/// <param name="active">Requested new status.</param>
		/// <returns>If successful - null, otherwise validation error.</returns>
		ECamelError UpdateEmployeeStatus(int employeeId, bool active);
		/// <summary>
		/// Change the manager of a library.
		/// </summary>
		/// <param name="libraryId">Id of library.</param>
		/// <param name="employeeId">employee id of the new manager.</param>
		ECamelError ChangeManager(int libraryId, int employeeId);
	}
}